<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue.js - 基础</title>
    <style>
        .container{
            width: 800px;
            height: 400px;
            border: 1px solid red;
            margin: 20px auto;
        }
    </style>
</head>
<body>
    <div id="app">
            <!-- 使用组件 -->
            <main-container :content="content">
                <!-- 使用具名插槽 来指定自定义的布局内容 -->
                <!-- vue@2.6+ 写法 ,通过v-slot 指令来命名 -->
                <template v-slot:header>
                    <h1>这是头部内容 - {{content.header}}</h1>
                    <!-- <h1>这是头部内容 - {{content.header}} 此时content 其实是直接使用父组件中的content</h1> -->
                </template>

                <template v-slot:body>
                    <h1>这是body内容</h1>
                </template>

                <template v-slot:footer>
                    <h1>这是footer内容</h1>
                </template>
            </main-container>

            <main-container :content="content1">
                <template v-slot:header>
                    <h2>这是头部内容11</h2>
                </template>

                <template v-slot:body>
                    <h1>这是body内容11</h1>
                </template>

                <template v-slot:footer>
                    <h1>这是footer内容11</h1>
                </template>

            </main-container>
        </div> 

    <template id="main-container-tpl">
        <div class="container">
            <!-- 头部内容 -->
            <div class="header">
                <slot name="header"></slot>
            </div>
            <!-- 正文内容 -->
            <div class="body">
                <slot name="body"></slot>
            </div>
            <!-- 底部内容 -->
            <div class="footer">
                <slot name="footer"></slot>
            </div>
        </div>
    </template>

    <!-- 引入vue框架 开发版 :包含警告 和调试信息 -->
    <script src="../lib/vue.js"></script>
    <script>
        // 使用具名插槽 v-slot:header 内容模板就会被渲染到 name为 header 的slot 中
        // 其实匿名插槽 相当于 v-slot:default 默认渲染到没有命名或者name为default的slot中

        Vue.component('MainContainer' , {
            props:['content'],
            template:'#main-container-tpl',
            data(){
                return {
                    content2:{
                    header:"这是头部 ---> 这是子组件中的数据",
                    body:"这是正文啊啊啊---> 这是子组件中的数据",
                    footer:"这是底部内容---> 这是子组件中的数据"
                }, 
                }
            },
            created(){
                console.log('接受到父组件传递的参数 :',this.content);
            }
        })

        //vm 就是根组件
        let vm = new Vue({
            el:"#app",//指定Vue挂载的DOM
            data:{//当前vue实例中使用的数据
                content:{
                    header:"这是头部",
                    body:"这是正文啊啊啊",
                    footer:"这是底部内容"
                },
                content1:{
                    header:"这是头部11",
                    body:"这是正文啊啊啊11",
                    footer:"这是底部内容11"
                }
            },
            methods:{//当前Vue实例中使用到的方法

            }
        })
    </script>
</body>
</html>